//
// Created by ASUS on 2024/12/12/星期四.
//
#include <bits/stdc++.h>
using namespace std;

#define int long long

void solve(){
	int n,target;cin>>n>>target;
	vector<vector<array<int,2>>> a(n);
	for(int i=0;i<n;i++){
		int s;cin>>s;
		for(int j=0;j<s;j++){
			int w,v;cin>>w>>v;
			a[i].push_back({w,v});
		}
	}


	vector<int> f(target+1);
	for(int i=0;i<n;i++){//遍历组
		for(int j=target;j>=0;j--){//遍历背包容量
			for(int k=0;k<a[i].size();k++){//遍历i组中的物品
				if(j>=a[i][k][0])
					f[j]=max(f[j],f[j-a[i][k][0]]+a[i][k][1]);
			}
		}
	}
	cout<<f[target];
}

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	int t=1;
	//cin>>t;
	while(t--){
		solve();
		if(t)cout<<"\n";
	}
	return 0;
}
